package com.lzy.example.repo;

import com.lzy.example.entity.User;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.Repository;
import org.springframework.data.repository.query.Param;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 继承 Repository 接口
 */
public interface UserRepository extends Repository<User, Integer> {

    /**
     * Repository 接口规则写法
     * 方法名称必须要遵循驼峰式命名规则，findBy（关键字）+属性名称（首字母大写）+查询条件（首字母大写）
     * @param fullName
     * @return
     */
    List<User> findByFullName(String fullName);
    User findById(Integer id);

    /**
     * 采用 hql 写法
     * @param fullName
     * @return
     */
    @Query("from User  where fullName like :fullName")
    List<User> getByFullName(String fullName);


    /**
     * 采用原生 sql 写法
     * @param fullName
     * @return
     */
    @Query(value = "select * from user where full_name like ?", nativeQuery = true)
    List<User> queryByFullName(String fullName);

    /**
     * 更新操作
     * @param
     */
    @Query("update User set fullName = :fullName where id = :id")
    @Modifying  //需要执行一个更新操作
//    @Transactional
    void updateFullName(String fullName, Integer id);

    /**
     * 删除
     * @param id
     */
    @Query("delete from User where id = :id")
    @Modifying
    void deleteById(Integer id);
}
